package me.twoday.library.mine.common;

import me.twoday.library.mine.common.base.BaseApplication;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;


/**
 * SharedPreference를 손쉽게 사용하기 위한 유틸리티 클래스
 * 
 * @author 박우람
 * @since 2011.02.16
 */
public class SharedUtil
{
	private static SharedUtil mSharedUtil = new SharedUtil();
	private Context mContext;
	
	public static SharedUtil getInstance()
	{
		mSharedUtil.mContext = BaseApplication.getContext();
		return mSharedUtil;
	}
	
	/**
	 * String 데이터를 저장합니다.
	 * 
	 * @param key 키
	 * @param value 값
	 */
	public void putSharedPreference(String key, String value)
	{
		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
		SharedPreferences.Editor editor = prefs.edit();
		editor.putString(key, value);
		editor.commit();
	}
	
	/**
	 * Boolean 데이터를 저장합니다.
	 * 
	 * @param key 키
	 * @param value 값
	 */
	public void putSharedPreference(String key, boolean value)
	{
		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
		SharedPreferences.Editor editor = prefs.edit();
		
		editor.putBoolean(key, value);
		editor.commit();
	}
	
	/**
	 * Integer 데이터를 저장합니다.
	 * 
	 * @param key 키
	 * @param value 값
	 */
	public void putSharedPreference(String key, int value)
	{
		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
		SharedPreferences.Editor editor = prefs.edit();
		
		editor.putInt(key, value);
		editor.commit();
	}
	
	/**
	 * Long 데이터를 저장합니다.
	 * 
	 * @param key 키
	 * @param value 값
	 */
	public void putSharedPreference(String key, long value)
	{
		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
		SharedPreferences.Editor editor = prefs.edit();
		
		editor.putLong(key, value);
		editor.commit();
	}
	
	/**
	 * String 데이터를 읽어옵니다.
	 * 
	 * @param key 키
	 * @return 읽어온 값, 값이 없을 경우 null이 반환된다.
	 */
	public String getSharedPreference(String key)
	{
		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);

		return prefs.getString(key, null);
	}

	/**
	 * Boolean 데이터를 읽어옵니다.
	 * 
	 * @param key 키
	 * @return 읽어온 값, 값이 없을 경우 false가 반환된다.
	 */
	public boolean getBooleanSharedPreference(String key)
	{
		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
		
		return prefs.getBoolean(key, false);
	}
	
	/**
	 * Integer 데이터를 읽어옵니다.
	 * 
	 * @param key 키
	 * @return 읽어온 값, 값이 없을 경우 0이 반환된다.
	 */
	public int getIntSharedPreference(String key)
	{
		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);

		return prefs.getInt(key, 0);
	}
	
	/**
	 * Long 데이터를 읽어옵니다.
	 * 
	 * @param key 키
	 * @return 읽어온 값, 값이 없을 경우 0이 반환된다.
	 */
	public long getLongSharedPreference(String key)
	{
		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
		
		return prefs.getLong(key, 0);
	}
	
	/**
	 * 값이 존재하는지 여부를 확인합니다.
	 * 
	 * @param key 키
	 * @return 값의 존재 여부
	 */
	public boolean hasPreference(String key)
	{
		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
		
		return prefs.contains(key);
	}
}